﻿// Copyright 2009 Mike Geise
// 
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// 
//     http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

namespace Falcon.Core.Controllers
{
	using System.Web.Mvc;
	using Falcon.Core.Domain;
	using Falcon.Core.Domain.Services;

	public class UserGroupController : DefaultController
	{
		public UserGroupController(
			IUserGroupService userGroupService,
			IUserGroupMemberService userGroupMemberService, 
			IUserGroupCommentService userGroupCommentService,
			IUserGroupPhotoService userGroupPhotoService)
		{
			this.UserGroupService = userGroupService;
			this.UserGroupMemberService = userGroupMemberService;
			this.UserGroupCommentService = userGroupCommentService;
			this.UserGroupPhotoService = userGroupPhotoService;
		}

		public IUserGroupService UserGroupService
		{
			get; 
			private set;
		}

		public IUserGroupMemberService UserGroupMemberService
		{
			get;
			private set;
		}

		public IUserGroupCommentService UserGroupCommentService
		{
			get;
			private set;
		}

		public IUserGroupPhotoService UserGroupPhotoService
		{
			get;
			private set;
		}

		public ActionResult Index(int? page)
		{
			var groups = UserGroupService.GetPaged(new UserGroupSpecification
			{
				Page = page,
				Limit = Settings.Users.GroupPageLimit
			});

			return View(Views.Index, groups);
		}

		public ActionResult Detail(int id, string slug, int? page)
		{
			var group = UserGroupService.GetById(id);

			if (group == null)
			{
				return Error(Resources.Messages.UserGroupNotFound);
			}

			if (!group.IsHidden && !group.IsPrivate)
			{
				UserGroupService.Populate(group, page);
			}
			else
			{
				if (group.IsMember)
				{
					UserGroupService.Populate(group, page);
				}
			}

			return group.IsPrivate && !group.IsMember ? NotAuthorized() : View(Views.Detail, group);
		}
	}
}